<?php
	// --------------------------
	require_once 'DBConfig.php';
	// --------------------------

	/**
 	* Klass DATABASE - Används för att skapa en databaskoppling och olika funktioner som krävs för att "prata" med databasen.
 	*/
	class Database
	{	
		private $mysqli = null;

		//----- FUNKTION: CONSTRUCT ---------------------------------------------------------------------------------------------
		/**
		* Funktion som öppnar en koppling mot databasen direkt vid skapandet av ett databasobjekt. 
		* @param DBConfig $dbConfig Databas uppgifterna: host, user, password, database.
		*/		
		public function __construct(DBConfig $dbConfig)
		{
			$this->OpenConnection($dbConfig);
		}


		//----- FUNKTION: OPEN CONNECTION ---------------------------------------------------------------------------------------
		/**
		* Funktion som skapar en koppling mot databasen. 
		* @param DBConfig $dbConfig Databas uppgifterna: host, user, password, database.
		* @return bool Retunerar true om det fungerade att skapa en uppkoppling mot databasen, annars false.
		*/
		public function OpenConnection(DBConfig $dbConfig)
		{
			// Vi öppnar en anslutning till databasen.
			$this->mysqli = new mysqli($dbConfig->host, $dbConfig->user, $dbConfig->password, $dbConfig->database);

			// Kontrollerar om det fungerar.
			if($this->mysqli->connect_error){
				return false;
			}

			// Sätter dit rätt charset.
			$this->mysqli->set_charset("utf8");
			return true;
		}


		//----- FUNKTION: CLOSE CONNECTION --------------------------------------------------------------------------------------		
		/**
		* Funktion som stänger vår koppling till databasen.
		* @return bool
		*/
		public function CloseConnection()
		{
			return $this->mysqli->close();
		}


		//----- FUNKTION: PREPARE QUERY -----------------------------------------------------------------------------------------
		/**
		* Funktion som anropar en inbyggd funktion i mysqli, förbereder SQL-satserna så att det kan köras imot en databas. 
		* @param string $query Den SQL-sats som ska förberedas.
		* @return mysqli_stmt $statement Returnerar ett mysqli-statement.
		*/
		public function PrepareQuery($query)
		{
			$statement = $this->mysqli->prepare($query);

			if ($statement == false) {
				return false;				
			}
			return $statement;
		}


		//----- FUNKTION: SELECT ------------------------------------------------------------------------------------------------
		/**
		* Funktion som hämtar ut information från databasen. 
		* @param mysqli_stmt $statement En förberedd SQL-sats.
		* @return mysqli_stmt $statement Innehåller det vi fick tillbaka från databasen.
		*/
		public function Select(mysqli_stmt $statement)
		{
			if ($statement->execute() == false) {
				return false;
			}
			$statement->store_result();
			return $statement;
		}


		//----- FUNKTION: INSERT ------------------------------------------------------------------------------------------------
		/**
		* Funktion som infogar data till databasen. 
		* @param mysqli_stmt $statement En förberedd SQL-sats.
		* @return int $insertID Den nya infogade radens ID.
		*/
		public function Insert(mysqli_stmt $statement)
		{
			if ($statement->execute() == false) {
				return false;
			}			
			$insertID = $statement->insert_id;
			$statement->close();			
			return $insertID;
		}


		//----- FUNKTION: Delete ------------------------------------------------------------------------------------------------
		/**
		* Funktion som tar bort data från databasen.
		* @param mysqli_stmt $statement En förberedd SQL-sats.
		*/
		public function Delete(mysqli_stmt $statement)
		{
			if ($statement->execute() == false) {
				return false;
			}
			$statement->close();
		}
	}
?>